package com.wzh.codegen.biz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wzh.codegen.api.domain.dto.TableConfigQuery;
import com.wzh.codegen.biz.domain.dto.CodegenTableConfigDTO;
import com.wzh.codegen.biz.domain.entity.CodegenTableConfig;
import com.wzh.common.general.result.PageQuery;
import com.wzh.common.general.result.PageResult;

import java.util.List;

/**
 * 代码生成表配置服务接口
 *
 * @author wzh
 * @since 2024-01-01
 */
public interface CodegenTableConfigService extends IService<CodegenTableConfig> {

    /**
     * 保存表配置
     *
     * @param dto 表配置DTO
     * @return 配置ID
     */
    Long saveTableConfig(CodegenTableConfigDTO dto);

    /**
     * 更新表配置
     *
     * @param dto 表配置DTO
     */
    void updateTableConfig(CodegenTableConfigDTO dto);

    /**
     * 获取表配置列表
     *
     * @param datasourceId 数据源ID（可选）
     * @return 表配置列表
     */
    List<CodegenTableConfigDTO> getTableConfigs(Long datasourceId);

    /**
     * 分页查询表配置
     *
     * @param pageQuery 分页参数
     * @return 分页结果
     */
    PageResult<CodegenTableConfigDTO> pageTableConfigs(PageQuery<TableConfigQuery> pageQuery);

    /**
     * 获取表配置详情
     *
     * @param id 配置ID
     * @return 表配置详情
     */
    CodegenTableConfigDTO getTableConfig(Long id);

    /**
     * 删除表配置
     *
     * @param id 配置ID
     */
    void deleteTableConfig(Long id);

    /**
     * 批量删除表配置
     *
     * @param ids 配置ID列表
     */
    void batchDeleteTableConfigs(List<Long> ids);

    /**
     * 根据数据源ID和表名获取表配置
     *
     * @param datasourceId 数据源ID
     * @param tableName    表名
     * @return 表配置
     */
    CodegenTableConfigDTO getTableConfigByDatasourceAndTable(Long datasourceId, String tableName);

    /**
     * 从数据库导入表配置
     *
     * @param datasourceId 数据源ID
     * @param tableName    表名
     * @return 表配置ID
     */
    Long importTableFromDatabase(Long datasourceId, String tableName);
}